-- Tabla con las transacciones realizadas sobre las cuentas
-- OBS: El id se carga con un trigger !!!
    CREATE TABLE "AC_TRX" 
    (    
        "TRX_ID" NUMBER(*,0) NOT NULL ENABLE, 
        "ACCOUNT_ID" NUMBER(*,0) NOT NULL ENABLE, 
        "TRX_DATE" TIMESTAMP (6) NOT NULL ENABLE, 
        "AMOUNT" NUMBER NOT NULL ENABLE, 
        "SOURCE_OBJECT_ID" NUMBER(*,0) NOT NULL ENABLE, 
        "SOURCE_OBJECT_CODE" VARCHAR2(30 BYTE) NOT NULL ENABLE, 
        CONSTRAINT "AC_TRX_PK" PRIMARY KEY ("TRX_ID") ENABLE, 
        CONSTRAINT "AC_TRX_AC_ACCOUNT_FK1" FOREIGN KEY ("ACCOUNT_ID") REFERENCES "AC_ACCOUNT" ("ACCOUNT_ID") ENABLE
    );

    COMMENT ON COLUMN "AC_TRX"."TRX_ID" IS 'Key';

    COMMENT ON COLUMN "AC_TRX"."ACCOUNT_ID" IS 'Cuenta en la que se genera esta trx.';

    COMMENT ON COLUMN "AC_TRX"."TRX_DATE" IS 'Fecha / hora de la trx.';

    COMMENT ON COLUMN "AC_TRX"."AMOUNT" IS 'Monto de la transacción. Positivo es un crédito y negativo un débito.';

    COMMENT ON COLUMN "AC_TRX"."SOURCE_OBJECT_CODE" IS 'Nombre de la tabla que está asociada con esta transacción. Por ejemplo: código de prepago, orden (para los débitos), cupones (para los créditos), etc.';

    COMMENT ON COLUMN "AC_TRX"."SOURCE_OBJECT_ID" IS 'ID del registro al que hace referencia esta transacción en la tabla especificada por SOURCE_OBJECT_CODE.';

    COMMENT ON TABLE "AC_TRX"  IS 'Historia de las transacciones sobre una cuenta.';


    CREATE SEQUENCE AC_TRX_ID_SEQ;

    create or replace
    TRIGGER "AC_TRX_ID_TRG" BEFORE INSERT ON AC_TRX
    FOR EACH ROW
    DECLARE
        ed date;
        ld varchar2(1);
    BEGIN
        SELECT end_date, locked into ed, ld
        from ac_account
        where account_id = :new.account_id;
        if ed is not null
        then
            Raise_application_error( -20002, 'La cuenta ' || TO_CHAR( :new.account_id ) || ' esta borrada '  );
        end if;
        if ld != 'F'
        then
            Raise_application_error( -20001, 'La cuenta ' || TO_CHAR( :new.account_id ) || ' esta bloqueada'  );
        end if;

        SELECT AC_TRX_ID_SEQ.NEXTVAL INTO :NEW.TRX_ID FROM DUAL;
    END;

